Stream Frame

Live video from your Steam Frame, in a native Mac window.

Before your first stream

  1. Connect your Mac and Steam Frame to the same local network. Guest networks may block communication between devices.
  2. On your Steam Frame, enable Developer Mode and SSH access, and set an SSH password. Find its IPv4 address in the headset’s network settings. See Valve’s debugging documentation.
  3. The headset must have ffmpeg with the libx264 encoder, and a readable video capture device at /dev/video99. This app assumes the capture device from the original proof of concept is already available. It does not install software or change headset permissions.
  4. Open Stream Frame, enter the headset’s address, and press Stream. The default SSH username is steamos; change it in Stream Frame → Settings if necessary.
  5. On first connection, verify and approve the headset’s SSH fingerprint. Enter your SSH password or key passphrase if prompted. Allow Local Network and firewall access if macOS asks.

While streaming

Press End (⌘.) to stop the remote capture and disconnect. Start again with ⌘R. Double-click the video or press ⌃⌘F for full screen. Closing the main window or quitting ends the stream. The app prevents idle system sleep during streaming; explicit sleep ends it.

The stream is video-only. The Mac automatically selects its receiving address and listens on UDP port 8090. No ffmpeg, ffplay, Homebrew, or additional playback software is required on the Mac.

Record video and take screenshots

While streaming, press Record (⇧⌘R), choose an MP4 filename and destination, and confirm the save dialog to start recording. The recording timer shows when capture is active. Stop Recording saves the movie while live playback continues. End, disconnect, sleep, window close, and Quit also finish the recording. Quitting waits for pending saves.

Press Screenshot (⇧⌘S) to capture the video frame at the moment you click, then save it as a full-resolution PNG. Window controls and overlays are excluded. Use Show in Finder after a successful save to find either file.

Recordings contain video only, at the received resolution. Both features save locally to your chosen location. A recording replaces an existing destination only after it finishes. If the app is forcibly killed or the Mac loses power, an unfinished temporary recording may remain in that folder.

Credentials and device identity

Passwords are never saved by Stream Frame. Standard keys in ~/.ssh and your SSH agent are supported. To keep connections predictable, the app does not read custom SSH configuration files or use proxy commands. Host trust is stored separately in ~/Library/Application Support/Stream Frame/known_hosts.

If a known device’s fingerprint changes, connection is blocked. Verify the new fingerprint directly on your headset before removing its old entry. Once verified, use Terminal: ssh-keygen -R HEADSET_IP -f "$HOME/Library/Application Support/Stream Frame/known_hosts", replacing HEADSET_IP with its address.

Troubleshooting

Connection lifecycle

End sends a control message over SSH. The remote shell sends SIGINT to its ffmpeg child and waits, escalating only if it does not exit. SSH EOF and remote signals run the same cleanup. A 15-second heartbeat watchdog also stops capture if the Mac disappears. Network interruption can delay cleanup until that watchdog expires.

SSH encrypts commands and authentication. The video uses unencrypted UDP on your local network, matching the proof of concept.

Requires macOS 14 or later. Independent utility; not affiliated with Valve.